summary refs log tree commit diff stats
path: root/tests/js.html
blob: 81baef784ca80a553bb22ce4a390f4bb39a60141 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!--  This has been written by hand. (c) 2010 Andreas Rumpf -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Nimrod JavaScript Generator Test</title>
<style type="text/css">
span.DecNumber {color: blue}
</style>
<script src="nimcache/js.js" type="text/javascript"></script>
</head>
<body onload="OnLoad()">
<form name="form1" action="js.html">
  <input type="text" name="input1" size="10" />
  <input type="button" value="Calculate square" onclick="OnButtonClick()" />
</form>

</body>
</html>
class="n">c: PContext, fn: PSym, tos: int): PSym # Searchs for the fn in the symbol table. If the parameter lists are exactly # the same the sym in the symbol table is returned, else nil. proc SearchForBorrowProc*(c: PContext, fn: PSym, tos: int): PSym # Searchs for the fn in the symbol table. If the parameter lists are suitable # for borrowing the sym in the symbol table is returned, else nil. # implementation proc equalGenericParams(procA, procB: PNode): bool = var a, b: PSym result = procA == procB if result: return if (procA == nil) or (procB == nil): return if sonsLen(procA) != sonsLen(procB): return for i in countup(0, sonsLen(procA) - 1): if procA.sons[i].kind != nkSym: InternalError(procA.info, "equalGenericParams") if procB.sons[i].kind != nkSym: InternalError(procB.info, "equalGenericParams") a = procA.sons[i].sym b = procB.sons[i].sym if (a.name.id != b.name.id) or not sameTypeOrNil(a.typ, b.typ): return if (a.ast != nil) and (b.ast != nil): if not ExprStructuralEquivalent(a.ast, b.ast): return result = true proc SearchForProc(c: PContext, fn: PSym, tos: int): PSym = var it: TIdentIter result = initIdentIter(it, c.tab.stack[tos], fn.Name) while result != nil: if (result.Kind == fn.kind): if equalGenericParams(result.ast.sons[genericParamsPos], fn.ast.sons[genericParamsPos]): case equalParams(result.typ.n, fn.typ.n) of paramsEqual: return of paramsIncompatible: liMessage(fn.info, errNotOverloadable, fn.name.s) return of paramsNotEqual: nil result = NextIdentIter(it, c.tab.stack[tos]) proc paramsFitBorrow(a, b: PNode): bool = var length: int m, n: PSym length = sonsLen(a) result = false if length == sonsLen(b): for i in countup(1, length - 1): m = a.sons[i].sym n = b.sons[i].sym assert((m.kind == skParam) and (n.kind == skParam)) if not equalOrDistinctOf(m.typ, n.typ): return if not equalOrDistinctOf(a.sons[0].typ, b.sons[0].typ): return result = true proc SearchForBorrowProc(c: PContext, fn: PSym, tos: int): PSym = # Searchs for the fn in the symbol table. If the parameter lists are suitable # for borrowing the sym in the symbol table is returned, else nil. var it: TIdentIter for scope in countdown(tos, 0): result = initIdentIter(it, c.tab.stack[scope], fn.Name) while result != nil: # watchout! result must not be the same as fn! if (result.Kind == fn.kind) and (result.id != fn.id): if equalGenericParams(result.ast.sons[genericParamsPos], fn.ast.sons[genericParamsPos]): if paramsFitBorrow(fn.typ.n, result.typ.n): return result = NextIdentIter(it, c.tab.stack[scope])