История изменений
Исправление FishHook, (текущая версия) :
Не вижу проблемы в многострочных макросах с отступами на Си.
define FUNCTION(name) {
def name
}
FUNCTION(foo):
print("Hello word")
Допустим, препроцессор всегда подставляет исходные отступы при подстановке кода в макрос. Пример выше должен работать, препроцессор увидит четыре пробела перед print и в итоге получим такой код:
def foo:
print("Hello word")
и даже такое сработает:
FUNCTION(bar):
FUNCTION(baz):
for i in 1..10:
print("Hello word")
def bar:
def baz:
for i in 1..10:
print("Hello word")
А дальше придумаем такое:
define FUNCTION(name) {
try:
}
define END {
except Exception:
log.error()
finally:
close()
}
и вот тут уже проблемы, потому что, ну допустим
FUNCTION(foo):
print(1 / 0)
END
превратится в тыкву
def foo:
try:
print(1 / 0) // УПС!!!
except Exception:
log.error()
finally:
close()
Исправление FishHook, :
define FUNCTION(name) {
def name
}
FUNCTION(foo):
print("Hello word")
Допустим, препроцессор всегда подставляет исходные отступы при подстановке кода в макрос. Пример выше должен работать, препроцессор увидит четыре пробела перед print и в итоге получим такой код:
def foo:
print("Hello word")
и даже такое сработает:
FUNCTION(bar):
FUNCTION(baz):
for i in 1..10:
print("Hello word")
def bar:
def baz:
for i in 1..10:
print("Hello word")
А дальше придумаем такое:
define FUNCTION(name) {
try:
}
define END {
except Exception:
log.error()
finally:
close()
}
и вот тут уже проблемы, потому что, ну допустим
FUNCTION(foo):
print(1 / 0)
END
превратится в тыкву
def foo:
try:
print(1 / 0) // УПС!!!
except Exception:
log.error()
finally:
close()
Исходная версия FishHook, :
define FUNCTION(name) {
def name
}
FUNCTION(foo):
print("Hello word")
Допустим, препроцессор всегда подставляет отступы при подстановке кода в макрос. Пример выше должен работать, препроцессор увидит четыре пробела перед print и в итоге получим такой код:
def foo:
print("Hello word")
и даже такое сработает:
FUNCTION(bar):
FUNCTION(baz):
for i in 1..10:
print("Hello word")
def bar:
def baz:
for i in 1..10:
print("Hello word")
А дальше придумаем такое:
define FUNCTION(name) {
try:
}
define END {
except Exception:
log.error()
finally:
close()
}
и вот тут уже проблемы, потому что, ну допустим
FUNCTION(foo):
print(1 / 0)
END
превратится в тыкву
def foo:
try:
print(1 / 0) // УПС!!!
except Exception:
log.error()
finally:
close()