本文整理汇总了Golang中piquant/lang/ast.Node.String方法的典型用法代码示例。如果您正苦于以下问题:Golang Node.String方法的具体用法?Golang Node.String怎么用?Golang Node.String使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类piquant/lang/ast.Node
的用法示例。
在下文中一共展示了Node.String方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: ensureList
func ensureList(n ast.Node) *ast.List {
if v, ok := n.(*ast.List); ok {
return v
}
panic("Expected list: " + n.String())
}
示例2: primConcat
func primConcat(e Env, head ast.Node, args []ast.Node) ast.Node {
var sum ast.Node
for _, arg := range args {
if sum == nil {
sum = arg
} else {
switch sumVal := sum.(type) {
case ast.Coll:
switch argVal := arg.(type) {
case ast.Coll:
sum = sumVal.Append(argVal)
default:
panicEvalError(arg, "Cannot concat a collection with a non-collection: "+arg.String())
}
default:
panicEvalError(arg, "Cannot concat a non-collection type: "+sum.String())
}
}
}
if sum == nil {
return &ast.Nil{}
} else {
return sum
}
}
示例3: ensureSymbol
func ensureSymbol(n ast.Node) *ast.Symbol {
if v, ok := n.(*ast.Symbol); ok {
return v
}
panic("Expected symbol: " + n.String())
}
示例4: toSymbolName
func toSymbolName(n ast.Node) string {
switch value := n.(type) {
case *ast.Symbol:
return value.Name
}
panic("Not a symbol: " + n.String())
}
示例5: toListValue
func toListValue(n ast.Node) *ast.List {
switch value := n.(type) {
case *ast.List:
return value
}
panicEvalError(n, "Expression is not a list: "+n.String())
return nil
}
示例6: toSymbolValue
func toSymbolValue(n ast.Node) string {
switch value := n.(type) {
case *ast.Symbol:
return value.Name
}
panicEvalError(n, "Expression is not a symbol: "+n.String())
return ""
}
示例7: toNumberValue
func toNumberValue(n ast.Node) float64 {
switch value := n.(type) {
case *ast.Number:
return value.Value
}
panicEvalError(n, "Expression is not a number: "+n.String())
return 0.0
}
示例8: testInputFile
func testInputFile(sourceFilePath string, t *testing.T) {
sourceDirPart, sourceFileNamePart := filepath.Split(sourceFilePath)
parts := strings.Split(sourceFileNamePart, ".")
testName := parts[0]
outputFilePath := sourceDirPart + testName + ".out"
input, errIn := util.ReadFile(sourceFilePath)
if errIn != nil {
t.Errorf("Error reading file <" + sourceFilePath + ">: " + errIn.Error())
return
}
expectedRaw, errOut := util.ReadFile(outputFilePath)
if errOut != nil {
t.Errorf("Error reading file <" + outputFilePath + ">: " + errOut.Error())
return
}
// Remove any carriage return line endings from .out file
expectedWithUntrimmed := strings.Replace(expectedRaw, "\r", "", -1)
expected := strings.TrimSpace(expectedWithUntrimmed)
nodes, errors := parser.Parse(input, sourceFilePath)
if errors.Len() != 0 {
verify(t, sourceFilePath, input, expected, errors.String())
} else {
e := interpreter.NewTopLevelMapEnv()
var outputBuffer bytes.Buffer
var result ast.Node
var evalError error
for _, n := range nodes {
result, evalError = interpreter.Eval(e, n, &outputBuffer)
if evalError != nil {
break
}
}
actual := (&outputBuffer).String()
if evalError == nil {
//DEBUG fmt.Printf("RESULT(%v): %v\n", sourceFilePath, result)
if result != nil {
actual = actual + result.String()
}
} else {
actual = actual + evalError.Error()
}
verify(t, sourceFilePath, input, expected, actual)
}
}
示例9: specialCond
func specialCond(e Env, head ast.Node, args []ast.Node) packet {
for i := 0; i < len(args); i += 2 {
predicate := toBooleanValue(trampoline(func() packet {
return evalNode(e, args[i])
}))
if predicate {
return bounce(func() packet {
return evalNode(e, args[i+1])
})
}
}
panicEvalError(head, "No matching cond clause: "+head.String())
return respond(&ast.Nil{})
}
示例10: Equals
func (f *Function) Equals(n ast.Node) bool {
panicEvalError(n, "Cannot compare the values of functions: "+
f.String()+" and "+n.String())
return false
}