Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
F
fuchsia.googlesource.com-third_party-mako
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
fuchsia-mirror
fuchsia.googlesource.com-third_party-mako
Commits
a7a8c619
Commit
a7a8c619
authored
18 years ago
by
Mike Bayer
Browse files
Options
Downloads
Patches
Plain Diff
namespaces....namespace idea needs clarification
parent
8d3ab49b
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
lib/mako/codegen.py
+28
-15
28 additions, 15 deletions
lib/mako/codegen.py
test/template.py
+1
-1
1 addition, 1 deletion
test/template.py
with
29 additions
and
16 deletions
lib/mako/codegen.py
+
28
−
15
View file @
a7a8c619
...
...
@@ -40,8 +40,6 @@ class Compiler(object):
main_identifiers
=
module_identifiers
.
branch
(
self
.
node
)
module_identifiers
.
toplevelcomponents
=
module_identifiers
.
toplevelcomponents
.
union
(
main_identifiers
.
toplevelcomponents
)
print
"
module_ident
"
,
module_identifiers
# print main render() method
_GenerateRenderMethod
(
printer
,
module_identifiers
,
self
.
node
)
...
...
@@ -71,9 +69,8 @@ class _GenerateRenderMethod(object):
args
=
[
a
for
a
in
[
'
context
'
]
+
args
]
printer
.
writeline
(
"
def %s(%s):
"
%
(
name
,
'
,
'
.
join
(
args
)))
identifiers
=
identifiers
.
branch
(
node
)
print
"
write comp
"
,
name
,
identifiers
self
.
write_variable_declares
(
identifiers
)
self
.
identifiers
=
identifiers
.
branch
(
node
)
self
.
write_variable_declares
(
self
.
identifiers
)
for
n
in
node
.
nodes
:
n
.
accept_visitor
(
self
)
printer
.
writeline
(
"
return
''"
)
...
...
@@ -81,11 +78,17 @@ class _GenerateRenderMethod(object):
printer
.
write
(
"
\n\n
"
)
def
write_variable_declares
(
self
,
identifiers
):
"""
write variable declarations at the top of a function.
"""
comp_idents
=
dict
([(
c
.
name
,
c
)
for
c
in
identifiers
.
components
])
print
"
Write variable declares, set is
"
,
identifiers
.
undeclared
.
union
(
util
.
Set
([
c
.
name
for
c
in
identifiers
.
closurecomponents
if
c
.
parent
is
self
.
node
]))
# write explicit "context.get()" statements for variables that are already in the
# local namespace, that we are going to re-assign
to_write
=
identifiers
.
declared
.
intersection
(
identifiers
.
locally_declared
)
# write "context.get()" for all variables we are going to need that arent in the namespace yet
to_write
=
to_write
.
union
(
identifiers
.
undeclared
)
# write closure functions for closures that we define right here
to_write
=
to_write
.
union
(
util
.
Set
([
c
.
name
for
c
in
identifiers
.
closurecomponents
if
c
.
parent
is
self
.
node
]))
for
ident
in
to_write
:
...
...
@@ -116,11 +119,10 @@ class _GenerateRenderMethod(object):
namedecls
=
node
.
function_decl
.
get_argument_expressions
()
self
.
printer
.
writeline
(
"
def %s(%s):
"
%
(
node
.
name
,
"
,
"
.
join
(
namedecls
)))
print
"
inline component, name
"
,
node
.
name
,
identifiers
identifiers
=
identifiers
.
branch
(
node
)
print
"
updated
"
,
identifiers
,
"
\n
"
# raise "hi"
# if we assign to variables in this closure, then we have to nest inside
# of another callable so that the "context" variable is copied into the local scope
make_closure
=
len
(
identifiers
.
locally_declared
)
>
0
if
make_closure
:
...
...
@@ -133,6 +135,7 @@ class _GenerateRenderMethod(object):
n
.
accept_visitor
(
self
)
self
.
printer
.
writeline
(
"
return
''"
)
self
.
printer
.
writeline
(
None
)
if
make_closure
:
namedecls
=
node
.
function_decl
.
get_argument_expressions
(
include_defaults
=
False
)
self
.
printer
.
writeline
(
"
return %s(%s)
"
%
(
node
.
name
,
"
,
"
.
join
([
"
%s=%s
"
%
(
x
,
x
)
for
x
in
[
'
context
'
]
+
namedecls
])))
...
...
@@ -154,6 +157,7 @@ class _GenerateRenderMethod(object):
if
not
node
.
ismodule
:
self
.
write_source_comment
(
node
)
self
.
printer
.
write_indented_block
(
node
.
text
)
# replace the context with a new one that contains all the variable assignments we have made
self
.
printer
.
writeline
(
'
context = context.update(%s)
'
%
(
"
,
"
.
join
([
"
%s=%s
"
%
(
x
,
x
)
for
x
in
node
.
declared_identifiers
()])))
def
visitIncludeTag
(
self
,
node
):
...
...
@@ -163,9 +167,11 @@ class _GenerateRenderMethod(object):
self
.
write_source_comment
(
node
)
self
.
printer
.
writeline
(
"
def make_namespace():
"
)
export
=
[]
identifiers
=
self
.
identifiers
#.branch(node)
print
"
NS IDENT
"
,
identifiers
class
NSComponentVisitor
(
object
):
def
visitComponentTag
(
s
,
node
):
self
.
write_inline_component
(
node
,
None
,
None
)
self
.
write_inline_component
(
node
,
identifiers
)
export
.
append
(
node
.
name
)
vis
=
NSComponentVisitor
()
for
n
in
node
.
nodes
:
...
...
@@ -189,17 +195,24 @@ class _GenerateRenderMethod(object):
class
_Identifiers
(
object
):
def
__init__
(
self
,
node
=
None
,
parent
=
None
):
if
parent
is
not
None
:
# things that have already been declared in the current namespace (i.e. names we can just use)
self
.
declared
=
util
.
Set
(
parent
.
declared
).
union
([
c
.
name
for
c
in
parent
.
closurecomponents
]).
union
(
parent
.
locally_declared
)
self
.
undeclared
=
util
.
Set
()
# top level components that are available
self
.
toplevelcomponents
=
util
.
Set
(
parent
.
toplevelcomponents
)
self
.
closurecomponents
=
util
.
Set
()
else
:
self
.
declared
=
util
.
Set
()
self
.
undeclared
=
util
.
Set
()
self
.
toplevelcomponents
=
util
.
Set
()
self
.
closurecomponents
=
util
.
Set
()
# things within this level that are undeclared
self
.
undeclared
=
util
.
Set
()
# things that are declared locally
self
.
locally_declared
=
util
.
Set
()
# closure components that are defined in this level
self
.
closurecomponents
=
util
.
Set
()
self
.
node
=
node
if
node
is
not
None
:
node
.
accept_visitor
(
self
)
...
...
@@ -219,6 +232,7 @@ class _Identifiers(object):
for
ident
in
node
.
undeclared_identifiers
():
if
ident
!=
'
context
'
and
ident
not
in
self
.
declared
.
union
(
self
.
locally_declared
):
self
.
undeclared
.
add
(
ident
)
def
visitExpression
(
self
,
node
):
self
.
check_declared
(
node
)
def
visitControlLine
(
self
,
node
):
...
...
@@ -227,7 +241,6 @@ class _Identifiers(object):
if
not
node
.
ismodule
:
self
.
check_declared
(
node
)
def
visitComponentTag
(
self
,
node
):
#print "component tag", node.name, "our node is:", getattr(self.node, 'name', self.node.__class__.__name__), (node is self.node or node.parent is self.node)
if
node
.
is_root
():
self
.
toplevelcomponents
.
add
(
node
)
elif
node
is
not
self
.
node
:
...
...
This diff is collapsed.
Click to expand it.
test/template.py
+
1
−
1
View file @
a7a8c619
...
...
@@ -259,7 +259,7 @@ class NamespaceTest(unittest.TestCase):
this is x a
</%component>
<%component name=
"
b
"
>
this is x b
this is x b
, and heres ${x.a()}
</%component>
</%namespace>
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment