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") } }
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) } }
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) } }
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() }
// 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])) }