func constNumIr(v int64, t types.T) codegen.Ref { b, ok := t.(types.Basic) if ok { switch b { case types.Int: return codegen.Snum(int32(v)) case types.Uint: return codegen.Num(uint32(v)) case types.Int8: return codegen.Byt(uint8(v), false) case types.Uint8: return codegen.Byt(uint8(v), true) } } panic("expect an integer type") }
package g8 import ( "e8vm.io/e8vm/g8/codegen" "e8vm.io/e8vm/g8/tast" "e8vm.io/e8vm/g8/types" "e8vm.io/e8vm/link8" "e8vm.io/e8vm/sym8" ) var ( refTrue = newRef(types.Bool, codegen.Byt(1, true)) refFalse = newRef(types.Bool, codegen.Byt(0, true)) refNil = newRef(types.Nil(), nil) ) func declareBuiltin(b *builder, builtin *link8.Pkg) { path := builtin.Path() e := b.p.HookBuiltin(builtin) if e != nil { b.Errorf(nil, e.Error()) return } o := func(name, as string, t *types.Func) codegen.Ref { sym := builtin.SymbolByName(name) if sym == nil { b.Errorf(nil, "builtin symbol %s missing", name) return nil } else if sym.Type != link8.SymFunc { b.Errorf(nil, "builtin symbol %s is not a function", name)