Файловый менеджер - Редактировать - /var/www/html/noder.zip
Ðазад
PK ! u�,�g g stencil.gonu �[��� // Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // This file will evolve, since we plan to do a mix of stenciling and passing // around dictionaries. package noder import ( "cmd/compile/internal/base" ) func assert(p bool) { base.Assert(p) } PK ! d�~ ~ codes.gonu �[��� // Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package noder import "internal/pkgbits" // A codeStmt distinguishes among statement encodings. type codeStmt int func (c codeStmt) Marker() pkgbits.SyncMarker { return pkgbits.SyncStmt1 } func (c codeStmt) Value() int { return int(c) } const ( stmtEnd codeStmt = iota stmtLabel stmtBlock stmtExpr stmtSend stmtAssign stmtAssignOp stmtIncDec stmtBranch stmtCall stmtReturn stmtIf stmtFor stmtSwitch stmtSelect ) // A codeExpr distinguishes among expression encodings. type codeExpr int func (c codeExpr) Marker() pkgbits.SyncMarker { return pkgbits.SyncExpr } func (c codeExpr) Value() int { return int(c) } // TODO(mdempsky): Split expr into addr, for lvalues. const ( exprConst codeExpr = iota exprLocal // local variable exprGlobal // global variable or function exprCompLit exprFuncLit exprFieldVal exprMethodVal exprMethodExpr exprIndex exprSlice exprAssert exprUnaryOp exprBinaryOp exprCall exprConvert exprNew exprMake exprSizeof exprAlignof exprOffsetof exprZero exprFuncInst exprRecv exprReshape exprRuntimeBuiltin // a reference to a runtime function from transformed syntax. Followed by string name, e.g., "panicrangeexit" ) type codeAssign int func (c codeAssign) Marker() pkgbits.SyncMarker { return pkgbits.SyncAssign } func (c codeAssign) Value() int { return int(c) } const ( assignBlank codeAssign = iota assignDef assignExpr ) // A codeDecl distinguishes among declaration encodings. type codeDecl int func (c codeDecl) Marker() pkgbits.SyncMarker { return pkgbits.SyncDecl } func (c codeDecl) Value() int { return int(c) } const ( declEnd codeDecl = iota declFunc declMethod declVar declOther ) PK ! aN� � lex_test.gonu �[��� // Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package noder import ( "reflect" "runtime" "testing" "cmd/compile/internal/syntax" ) func eq(a, b []string) bool { if len(a) != len(b) { return false } for i := 0; i < len(a); i++ { if a[i] != b[i] { return false } } return true } func TestPragmaFields(t *testing.T) { var tests = []struct { in string want []string }{ {"", []string{}}, {" \t ", []string{}}, {`""""`, []string{`""`, `""`}}, {" a'b'c ", []string{"a'b'c"}}, {"1 2 3 4", []string{"1", "2", "3", "4"}}, {"\n☺\t☹\n", []string{"☺", "☹"}}, {`"1 2 " 3 " 4 5"`, []string{`"1 2 "`, `3`, `" 4 5"`}}, {`"1""2 3""4"`, []string{`"1"`, `"2 3"`, `"4"`}}, {`12"34"`, []string{`12`, `"34"`}}, {`12"34 `, []string{`12`}}, } for _, tt := range tests { got := pragmaFields(tt.in) if !eq(got, tt.want) { t.Errorf("pragmaFields(%q) = %v; want %v", tt.in, got, tt.want) continue } } } func TestPragcgo(t *testing.T) { type testStruct struct { in string want []string } var tests = []testStruct{ {`go:cgo_export_dynamic local`, []string{`cgo_export_dynamic`, `local`}}, {`go:cgo_export_dynamic local remote`, []string{`cgo_export_dynamic`, `local`, `remote`}}, {`go:cgo_export_dynamic local' remote'`, []string{`cgo_export_dynamic`, `local'`, `remote'`}}, {`go:cgo_export_static local`, []string{`cgo_export_static`, `local`}}, {`go:cgo_export_static local remote`, []string{`cgo_export_static`, `local`, `remote`}}, {`go:cgo_export_static local' remote'`, []string{`cgo_export_static`, `local'`, `remote'`}}, {`go:cgo_import_dynamic local`, []string{`cgo_import_dynamic`, `local`}}, {`go:cgo_import_dynamic local remote`, []string{`cgo_import_dynamic`, `local`, `remote`}}, {`go:cgo_import_static local`, []string{`cgo_import_static`, `local`}}, {`go:cgo_import_static local'`, []string{`cgo_import_static`, `local'`}}, {`go:cgo_dynamic_linker "/path/"`, []string{`cgo_dynamic_linker`, `/path/`}}, {`go:cgo_dynamic_linker "/p ath/"`, []string{`cgo_dynamic_linker`, `/p ath/`}}, {`go:cgo_ldflag "arg"`, []string{`cgo_ldflag`, `arg`}}, {`go:cgo_ldflag "a rg"`, []string{`cgo_ldflag`, `a rg`}}, } if runtime.GOOS != "aix" { tests = append(tests, []testStruct{ {`go:cgo_import_dynamic local remote "library"`, []string{`cgo_import_dynamic`, `local`, `remote`, `library`}}, {`go:cgo_import_dynamic local' remote' "lib rary"`, []string{`cgo_import_dynamic`, `local'`, `remote'`, `lib rary`}}, }...) } else { // cgo_import_dynamic with a library is slightly different on AIX // as the library field must follow the pattern [libc.a/object.o]. tests = append(tests, []testStruct{ {`go:cgo_import_dynamic local remote "lib.a/obj.o"`, []string{`cgo_import_dynamic`, `local`, `remote`, `lib.a/obj.o`}}, // This test must fail. {`go:cgo_import_dynamic local' remote' "library"`, []string{`<unknown position>: usage: //go:cgo_import_dynamic local [remote ["lib.a/object.o"]]`}}, }...) } var p noder var nopos syntax.Pos for _, tt := range tests { p.err = make(chan syntax.Error) gotch := make(chan [][]string, 1) go func() { p.pragcgobuf = nil p.pragcgo(nopos, tt.in) if p.pragcgobuf != nil { gotch <- p.pragcgobuf } }() select { case e := <-p.err: want := tt.want[0] if e.Error() != want { t.Errorf("pragcgo(%q) = %q; want %q", tt.in, e, want) continue } case got := <-gotch: want := [][]string{tt.want} if !reflect.DeepEqual(got, want) { t.Errorf("pragcgo(%q) = %q; want %q", tt.in, got, want) continue } } } } PK ! �yY4 4 stmt.gonu �[��� // Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package noder import ( "cmd/compile/internal/ir" "cmd/compile/internal/syntax" ) // TODO(mdempsky): Investigate replacing with switch statements or dense arrays. var branchOps = [...]ir.Op{ syntax.Break: ir.OBREAK, syntax.Continue: ir.OCONTINUE, syntax.Fallthrough: ir.OFALL, syntax.Goto: ir.OGOTO, } var callOps = [...]ir.Op{ syntax.Defer: ir.ODEFER, syntax.Go: ir.OGO, } PK ! ]D��&