コード例 #1
0
func (emt *EmitterData) initStrVTerm(depth int, term *syntax.Term) {
	term.IndexInLiterals = emt.currTermNum

	for i := 0; i < len(term.Value.Str); i++ {
		emt.printLabel(depth, fmt.Sprintf("_memMngr.vterms[%d] = (struct vterm_t){.tag = V_CHAR_TAG, .ch = %d};", emt.currTermNum, term.Value.Str[i]))
		emt.currTermNum++
	}
}
コード例 #2
0
// Инициализация vterm_t для идентификатора
func (emt *EmitterData) initIdentVTerm(depth int, term *syntax.Term, ident string) {
	runesStr := getStrOfRunes(ident)

	emt.printLabel(depth, fmt.Sprintf("_memMngr.vterms[%d] = (struct vterm_t){.tag = V_IDENT_TAG, .str = allocateVStringLiteral((uint32_t[]){%s}, UINT64_C(%d))};",
		emt.currTermNum, runesStr, utf8.RuneCountInString(ident)))

	term.IndexInLiterals = emt.currTermNum
	emt.currTermNum++
}
コード例 #3
0
// Инициализация vterm_t для литералов целого типа
// Пока только обычные
func (emt *EmitterData) initIntNumVTerm(depth int, term *syntax.Term) {
	bytesStr, sign, bytesCount := getStrOfBytes(term.Value.Int)

	emt.printLabel(depth, fmt.Sprintf("_memMngr.vterms[%d] = (struct vterm_t){.tag = V_INT_NUM_TAG,"+
		" .intNum = allocateIntNumberLiteral((uint8_t[]){%s}, %d, UINT64_C(%d))};",
		emt.currTermNum, bytesStr, sign, bytesCount))

	term.IndexInLiterals = emt.currTermNum
	emt.currTermNum++
}
コード例 #4
0
// Инициализация vterm_t для литералов вещественного типа
func (emt *EmitterData) initFloatVTerm(depth int, term *syntax.Term) {

	emt.printLabel(depth, fmt.Sprintf("_memMngr.vterms[%d] = (struct vterm_t){.tag = V_DOUBLE_NUM_TAG, .doubleNum = %f};", emt.currTermNum, term.Value.Float))
	term.IndexInLiterals = emt.currTermNum
	emt.currTermNum++
}