From 78e32011c7170fb102cc45669e8dea502b07fab3 Mon Sep 17 00:00:00 2001 From: robotis Date: Mon, 4 Jun 2012 07:27:53 +0000 Subject: [PATCH] Handle calling scope better --- lesscpy/lessc/parser.py | 2 +- lesscpy/lessc/scope.py | 1 + lesscpy/plib/block.py | 2 ++ lesscpy/plib/deferred.py | 9 +++++---- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lesscpy/lessc/parser.py b/lesscpy/lessc/parser.py index eff85d6..6ec884d 100644 --- a/lesscpy/lessc/parser.py +++ b/lesscpy/lessc/parser.py @@ -286,7 +286,7 @@ class LessParser(object): """ call_mixin : identifier t_popen mixin_args_list t_pclose ';' """ p[1].parse(None) - p[0] = Deferred(p[1], p[3], p.lineno(4), self.scope.current) + p[0] = Deferred(p[1], p[3], p.lineno(4)) def p_mixin_args_arguments(self, p): """ mixin_args_list : less_arguments diff --git a/lesscpy/lessc/scope.py b/lesscpy/lessc/scope.py index b51fa61..94296e8 100644 --- a/lesscpy/lessc/scope.py +++ b/lesscpy/lessc/scope.py @@ -21,6 +21,7 @@ class Scope(list): self._mixins = {} if init: self.push() self.deferred = False + self.real = [] def push(self): """Push level on scope diff --git a/lesscpy/plib/block.py b/lesscpy/plib/block.py index e26c594..385d83a 100644 --- a/lesscpy/plib/block.py +++ b/lesscpy/plib/block.py @@ -32,12 +32,14 @@ class Block(Node): scope.push() self.name, inner = self.tokens scope.current = self.name + scope.real.append(self.name) if not self.name.parsed: self.name.parse(scope) if not inner: inner = [] inner = list(utility.flatten([p.parse(scope) for p in inner if p])) self.parsed = [p for p in inner if p and type(p) is not Block] self.inner = [p for p in inner if p and type(p) is Block] + scope.real.pop() scope.pop() return self diff --git a/lesscpy/plib/deferred.py b/lesscpy/plib/deferred.py index c1f8853..842dfd6 100644 --- a/lesscpy/plib/deferred.py +++ b/lesscpy/plib/deferred.py @@ -11,7 +11,7 @@ from .node import Node from lesscpy.lessc import utility class Deferred(Node): - def __init__(self, mixin, args, lineno=0, caller=None): + def __init__(self, mixin, args, lineno=0): """This node represents mixin calls. The calls to these mixins are deferred until the second parse cycle. lessc.js allows calls to mixins not @@ -22,7 +22,6 @@ class Deferred(Node): """ self.tokens = [mixin, args] self.lineno = lineno - self.caller = caller def parse(self, scope, error=False): """ Parse function. We search for mixins @@ -46,6 +45,9 @@ class Deferred(Node): ident.parse(scope) mixins = scope.mixins(ident.raw()) +# if scope.real: +# print(scope.real[-1].raw()) + if not mixins: ident.parse(None) mixins = scope.mixins(ident.raw()) @@ -68,10 +70,9 @@ class Deferred(Node): block = scope.blocks(ident.raw()) if not block: ident.parse(None) - self.caller.parse(None) block = scope.blocks(ident.raw()) if block: - scope.current = self.caller + scope.current = scope.real[-1] if scope.real else None res = block.copy_inner(scope) scope.current = None