Тема: SweetJS тред
Показать сообщение отдельно
  #2 (permalink)  
Старый 27.07.2015, 22:44
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Валидные декораторы с точки зрения синтаксиса JS для функций (в ES7 декораторы можно вешать только на классы, методы класса и литерала объекта).

macro func {
	rule { $arg => $body:expr }
	rule { $arg => { $body ... } }
	rule { ($args (,) ...) => $body:expr }
	rule { ($args (,) ...) => { $body ... } }
	rule { function ($args (,) ...) { $body ... } }
	rule { function $name:ident ($args (,) ...) { $body ... } }
}

macro decorate {
	rule { $f:expr @ ($decorator) } => {
		$decorator($f)
	}

	rule { $f:func @ ($head $tail ...) } => {
		decorate $head($f) @ ($tail ...)
	}

	rule { ($decorators:expr (,) ...) :: $f:func } => {
		decorate $f @ ($decorators ...)
	}
}


function wrapper(cb) {
	return function () {
		alert(1);
		return cb.apply(this, arguments);
	};
}

let foo = decorate(wrapper) :: function (a, b) {
	return a + b;
};
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 27.07.2015 в 23:10.
Ответить с цитированием