projects
/
m17n
/
m17n-lib-cs.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7e9120e
)
*** empty log message ***
author
handa
<handa>
Wed, 2 Dec 2009 00:07:29 +0000
(
00:07
+0000)
committer
handa
<handa>
Wed, 2 Dec 2009 00:07:29 +0000
(
00:07
+0000)
XmlExpr.cs
patch
|
blob
|
history
xex.txt
patch
|
blob
|
history
diff --git
a/XmlExpr.cs
b/XmlExpr.cs
index
4d2f76b
..
08954e8
100644
(file)
--- a/
XmlExpr.cs
+++ b/
XmlExpr.cs
@@
-86,6
+86,7
@@
namespace System.Xml
public static Symbol VariableRangeConflict = "variable-range-conflict";
public static Symbol VariableWrongRange = "variable-wrong-range";
public static Symbol VariableWrongValue = "variable-wrong-value";
public static Symbol VariableRangeConflict = "variable-range-conflict";
public static Symbol VariableWrongRange = "variable-wrong-range";
public static Symbol VariableWrongValue = "variable-wrong-value";
+
public static Symbol UnknownFunction = "unknown-function";
public static Symbol MacroExpansionError = "macro-expansion-error";
public static Symbol NoVariableName = "no-variable-anme";
public static Symbol UnknownFunction = "unknown-function";
public static Symbol MacroExpansionError = "macro-expansion-error";
public static Symbol NoVariableName = "no-variable-anme";
@@
-739,11
+740,15
@@
namespace System.Xml
internal void ThrowSymbol (Term tag)
{
internal void ThrowSymbol (Term tag)
{
+ int i = catch_count;
foreach (CatchTag elt in catch_stack)
{
foreach (CatchTag elt in catch_stack)
{
- catch_count--;
+ i--;
if (elt.Tag.Matches (tag))
if (elt.Tag.Matches (tag))
- return;
+ {
+ catch_count = i;
+ return;
+ }
}
throw new Error (Error.UncaughtThrow,
"No corresponding catch: {0}", tag);
}
throw new Error (Error.UncaughtThrow,
"No corresponding catch: {0}", tag);
@@
-856,8
+861,20
@@
namespace System.Xml
internal Variable Defvar (Symbol name)
{
internal Variable Defvar (Symbol name)
{
- Variable vari = new Variable (this, name, Zero);
- variables[name] = vari;
+ Variable vari;
+
+ if (variables.TryGetValue (name, out vari))
+ {
+ Variable.Typed typed = vari as Variable.Typed;
+ if (typed != null)
+ throw new Error (Error.VariableTypeConflict,
+ "Not a non-typed variable: {0}", name);
+ }
+ else
+ {
+ vari = new Variable (this, name, Zero);
+ variables[name] = vari;
+ }
return vari;
}
return vari;
}
@@
-1390,16
+1407,26
@@
namespace System.Xml
private static Term Fand (Domain domain, Variable vari, Term[] args)
{
foreach (Term arg in args)
private static Term Fand (Domain domain, Variable vari, Term[] args)
{
foreach (Term arg in args)
- if (! arg.Eval (domain).IsTrue)
- return Zero;
+ {
+ Term result = arg.Eval (domain);
+ if (domain.Thrown ())
+ result;
+ if (! result.IsTrue)
+ return Zero;
+ }
return One;
}
private static Term For (Domain domain, Variable vari, Term[] args)
{
foreach (Term arg in args)
return One;
}
private static Term For (Domain domain, Variable vari, Term[] args)
{
foreach (Term arg in args)
- if (arg.Eval (domain).IsTrue)
- return One;
+ {
+ Term result = arg.Eval (domain);
+ if (domain.Thrown ())
+ return result;
+ if (result.IsTrue)
+ return One;
+ }
return Zero;
}
return Zero;
}
@@
-1413,13
+1440,21
@@
namespace System.Xml
Term result = One;
foreach (Term arg in args)
Term result = One;
foreach (Term arg in args)
- result = arg.Eval (domain);
+ {
+ result = arg.Eval (domain);
+ if (domain.Thrown ())
+ return result;
+ }
return result;
}
private static Term Fif (Domain domain, Variable vari, Term[] args)
{
return result;
}
private static Term Fif (Domain domain, Variable vari, Term[] args)
{
- if (args[0].Eval (domain).IsTrue)
+ Term result = args[0].Eval (domain);
+
+ if (domain.Thrown)
+ return result;
+ if (result.IsTrue)
return args[1].Eval (domain);
if (args.Length == 2)
return Zero;
return args[1].Eval (domain);
if (args.Length == 2)
return Zero;
@@
-1428,11
+1463,19
@@
namespace System.Xml
private static Term Fwhen (Domain domain, Variable vari, Term[] args)
{
private static Term Fwhen (Domain domain, Variable vari, Term[] args)
{
- if (! args[0].Eval (domain).IsTrue)
+ Term result = args[0].Eval (domain);
+
+ if (domain.Thrown)
+ return result;
+ if (! result.IsTrue)
return Zero;
return Zero;
- Term result = One;
+ result = One;
for (int i = 1; i < args.Length; i++)
for (int i = 1; i < args.Length; i++)
- result = args[i].Eval (domain);
+ {
+ result = args[i].Eval (domain);
+ if (domain.Thrown)
+ return result;
+ }
return result;
}
return result;
}
@@
-1565,7
+1608,7
@@
namespace System.Xml
{
result = terms[i].Eval (domain);
if (domain.Thrown (out caught))
{
result = terms[i].Eval (domain);
if (domain.Thrown (out caught))
- break;
+ return result;
}
return result;
}
}
return result;
}
diff --git
a/xex.txt
b/xex.txt
index
0adac9b
..
055a0eb
100644
(file)
--- a/
xex.txt
+++ b/
xex.txt
@@
-181,7
+181,7
@@
CONCAT = '<concat>' [ STRTERM | INTTERM | LISTTERM ] + '</concat>'
LENGTH = '<length>' [ STRTERM | LISTTERM ] '</length>'
NTH = '<nth>' INTTERM [ STRTERM | LISTTERM ] '</nth>'
LENGTH = '<length>' [ STRTERM | LISTTERM ] '</length>'
NTH = '<nth>' INTTERM [ STRTERM | LISTTERM ] '</nth>'
-COPY = '<copy>' LISTTERM '</nth>'
+COPY = '<copy>' [ STRTERM | LISTTERM ] '</nth>'
INS = '<ins vname="' VNAME '">' INTTERM [ STRTERM | LISTTERM ] '</ins>'
DEL = '<del vname="' VNAME '">' INTTERM INTTERM '</ins>'
INS = '<ins vname="' VNAME '">' INTTERM [ STRTERM | LISTTERM ] '</ins>'
DEL = '<del vname="' VNAME '">' INTTERM INTTERM '</ins>'