Beispiel #1
0
func (v *Codegen) genExpr(n parser.Expr) llvm.Value {
	switch n.(type) {
	case *parser.AddressOfExpr:
		return v.genAddressOfExpr(n.(*parser.AddressOfExpr))
	case *parser.RuneLiteral:
		return v.genRuneLiteral(n.(*parser.RuneLiteral))
	case *parser.NumericLiteral:
		return v.genNumericLiteral(n.(*parser.NumericLiteral))
	case *parser.StringLiteral:
		return v.genStringLiteral(n.(*parser.StringLiteral))
	case *parser.BoolLiteral:
		return v.genBoolLiteral(n.(*parser.BoolLiteral))
	case *parser.TupleLiteral:
		return v.genTupleLiteral(n.(*parser.TupleLiteral))
	case *parser.ArrayLiteral:
		return v.genArrayLiteral(n.(*parser.ArrayLiteral))
	case *parser.BinaryExpr:
		return v.genBinaryExpr(n.(*parser.BinaryExpr))
	case *parser.UnaryExpr:
		return v.genUnaryExpr(n.(*parser.UnaryExpr))
	case *parser.CastExpr:
		return v.genCastExpr(n.(*parser.CastExpr))
	case *parser.CallExpr:
		return v.genCallExpr(n.(*parser.CallExpr))
	case *parser.VariableAccessExpr, *parser.StructAccessExpr, *parser.ArrayAccessExpr, *parser.TupleAccessExpr, *parser.DerefAccessExpr:
		return v.genAccessExpr(n)
	case *parser.SizeofExpr:
		return v.genSizeofExpr(n.(*parser.SizeofExpr))
	default:
		log.Debug("codegen", "expr: %s\n", n)
		panic("unimplemented expr")
	}
}
Beispiel #2
0
func (v *ModuleLookup) Dump(i int) {
	if v.Name != "" {
		log.Debug("main", "%s", strings.Repeat(" ", i))
		log.Debugln("main", "%s", v.Name)
	}

	for _, child := range v.Children {
		child.Dump(i + 1)
	}
}
Beispiel #3
0
Datei: scope.go Projekt: vnev/ark
func (v *Scope) Dump(depth int) {
	indent := strings.Repeat(" ", depth)

	if depth == 0 {
		log.Debug("parser", indent)
		log.Debugln("parser", "This scope:")
	}

	for name, ident := range v.Idents {
		log.Debug("parser", indent)
		log.Debugln("parser", " %s (%s)", name, ident.Type)
	}

	if v.Outer != nil {
		log.Debug("parser", indent)
		log.Debugln("parser", "Parent scope:")
		v.Outer.Dump(depth + 1)
	}

}
Beispiel #4
0
func (v *lexer) pushToken(t TokenType) {
	tok := &Token{
		Type:     t,
		Contents: string(v.input.Contents[v.startPos:v.endPos]),
		Where:    NewSpan(v.tokStart, v.curPos),
	}

	v.input.Tokens = append(v.input.Tokens, tok)

	log.Debug("lexer", "[%4d:%4d:% 11s] `%s`\n", v.startPos, v.endPos, tok.Type, tok.Contents)

	v.discardBuffer()
}
Beispiel #5
0
// debugging func
func (v *lexer) printBuffer() {
	log.Debug("lexer", "[%d:%d] `%s`\n", v.startPos, v.endPos, string(v.input.Contents[v.startPos:v.endPos]))
}